Здравствуйте! Решил выполнить задание из набора "Йодо". Задача: имеется кнопка и термометр, при нажатии кнопки, должна изменяться единица измерения температуры. Проблема в том, что микроконтроллер не хочет выходить из предыдущего интервала и переходить к следующему. Вместо этого, он просто добавляет другой интервал. Код (Javascript): var thermometer = require('http://js.amperka.ru/modules/@amperka/thermometer.js') .connect(A4); var button = require('http://js.amperka.ru/modules/@amperka/button.js') .connect(P1); var a = -1; button.on('press', function() { a++; if(a == 3) { a = 0; } //если а == 0, то показывать °С. Если а == 1, то показывать °К. Если а == 2, то показывать °F. if (a == 0) { var cel = setInterval(function() { var celsius = thermometer.read('C'); console.log( 'Temperature =', celsius.toFixed(1), '°C'); }, 1000); if(a == 1) { clearInterval(cel); } //выход из интервала } else if(a == 1){ var kel = setInterval(function() { var celsius = thermometer.read('C'); var kelvin = celsius - 273.15; console.log( 'Temperature =', kelvin.toFixed(1), '°K'); }, 1000); if(a == 2) { clearInterval(kel); } //выход из интервала } else if (a == 2){ var far = setInterval(function() { var celsius = thermometer.read('C'); var farengeyt = celsius * 1.8 + 32; console.log( 'Temperature =', farengeyt.toFixed(1), '°F'); }, 1000); if(a == 0) { clearInterval(far); } //выход из интервала } }); В итоге получается такая бурда: Может, кто-нибудь сможет подсказать, решения
Прошу прощения, мои навыки в программировании очень скудны) Но при попытке вынести clearInterval за пределы setInterval, ругаются, что clearInterval вынесли за скобки. Код (Java): if (a == 0) { var cel = setInterval(function() { var celsius = thermometer.read('C'); console.log( 'Temperature =', celsius.toFixed(1), '°C'); }, 1000); } if(a == 1) { clearInterval(cel); } //выход из интервала else if(a == 1){ var kel = setInterval(function() { var celsius = thermometer.read('C'); var kelvin = celsius - 273.15; console.log( 'Temperature =', kelvin.toFixed(1), '°K'); }, 1000); } if(a == 2) { clearInterval(kel); } //выход из интервала else if (a == 2){ var far = setInterval(function() { var celsius = thermometer.read('C'); var farengeyt = celsius * 1.8 + 32; console.log( 'Temperature =', farengeyt.toFixed(1), '°F'); }, 1000); } if(a == 0) { clearInterval(far); } //выход из интервала Был бы благодарен, если расскажете поподробней
В итоге спустя долгого ковыряния в коде и кучу перерытых форумов, методом научного тыка решил задачу. Код (Javascript): button.on('press', function() { a++; if(a == 3) { a = 0; } //если а == 0, то показывать °С. Если а == 1, то показывать °К. Если а == 2, то показывать °F. if (a == 0) { clearInterval(this.far); var cel = setInterval(function() { var celsius = thermometer.read('C'); console.log( 'Temperature =', celsius.toFixed(1), '°C'); }, 1000); } if(a == 1){ clearInterval(this.cel); var kel = setInterval(function() { var celsius = thermometer.read('C'); var kelvin = celsius - 273.15; console.log( 'Temperature =', kelvin.toFixed(1), '°K'); }, 1000); } if (a == 2){ clearInterval(this.kel); var far = setInterval(function() { var celsius = thermometer.read('C'); var farengeyt = celsius * 1.8 + 32; console.log( 'Temperature =', farengeyt.toFixed(1), '°F'); }, 1000); } }); Все работает, и при нажатии на кнопку переключает единицы измерения. Но появилась новая маленькая проблема: при нажатии на кнопку выскакивает "ашипка" " Uncaught Error: Unknown Timeout at line 1 col 236 ...Timeout(this._holdTimeoutID),this._holdTimeoutID=null,this.e... ^ " и затем идёт показ температуры. Может кто-нибудь знает, как её можно решить? Было бы круто довести проектик до конца)
если заменить "button.on('press' " на button.on('click' - то вроде как работает) только вот кельвины вы неправильно считаете, поменяйте " -" на "+" в формуле
Думаю оптимальнее если один интервал за все будет работать: Код (Javascript): button.on('press', () => { if (++a > 2) a = 0; }); getType = (temperature) => { switch (a) { case 0: return 'Temperature: ' + temperature.toFixed(1) + '°C'; case 1: return 'Temperature: ' + (temperature + 273.15).toFixed(1) + '°K'; case 2: return 'Temperature: ' + (temperature * 1.8 + 32).toFixed(1) + '°F'; } }; setInterval(() => print(getType(thermometer.read('C'))), 1000);
что-то ошибку выдаёт : Uncaught SyntaxError: Got ')' expected EOF at line 10 col 21 button.on('press', () => { ^